import defaultSettings from '@/settings'

// 导入 Element Plus 中英文语言包
import zhCn from 'element-plus/es/locale/lang/zh-cn'
import en from 'element-plus/es/locale/lang/en'
import { store } from '@/store'
import { DeviceEnum } from '@/enums/DeviceEnum'
import { SidebarStatusEnum } from '@/enums/SidebarStatusEnum'

// setup
export const useAppStore = defineStore('app', () => {
	// state
	const device = useStorage('device', DeviceEnum.DESKTOP)
	const size = useStorage('size', defaultSettings.size)
	const language = useStorage('language', defaultSettings.language)
	const sidebarStatus = useStorage('sidebarStatus', SidebarStatusEnum.CLOSED)

	const sidebar = reactive({
		opened: sidebarStatus.value === SidebarStatusEnum.OPENED,
		withoutAnimation: false
	})
	const activeTopMenuPath = useStorage('activeTopMenuPath', '')
	/**
	 * 根据语言标识读取对应的语言包
	 */
	const locale = computed(() => {
		if (language?.value === 'en') {
			return en
		} else {
			return zhCn
		}
	})

	// actions
	function toggleSidebar() {
		sidebar.opened = !sidebar.opened
		sidebarStatus.value = sidebar.opened
			? SidebarStatusEnum.OPENED
			: SidebarStatusEnum.CLOSED
	}

	function closeSideBar() {
		sidebar.opened = false
		sidebarStatus.value = SidebarStatusEnum.CLOSED
	}

	function openSideBar() {
		sidebar.opened = true
		sidebarStatus.value = SidebarStatusEnum.OPENED
	}

	function toggleDevice(val: string) {
		device.value = val
	}

	function changeSize(val: string) {
		size.value = val
	}
	/**
	 * 切换语言
	 *
	 * @param val
	 */
	function changeLanguage(val: string) {
		language.value = val
	}
	/**
	 * 混合模式顶部切换
	 */
	function activeTopMenu(val: string) {
		activeTopMenuPath.value = val
	}
	return {
		device,
		sidebar,
		language,
		locale,
		size,
		activeTopMenu,
		toggleDevice,
		changeSize,
		changeLanguage,
		toggleSidebar,
		closeSideBar,
		openSideBar,
		activeTopMenuPath
	}
})

// 手动提供给 useStore() 函数 pinia 实例
// https://pinia.vuejs.org/zh/core-concepts/outside-component-usage.html#using-a-store-outside-of-a-component
export function useAppStoreHook() {
	return useAppStore(store)
}
